Mestrado Profissional em Administração
IFMG - Campus Formiga
1 de outubro de 2024
dplyr
Descrição
select()filter()group_by()summarize()mutate()arrange()%>%) para combinar essas funções.Obs. Utilizaremos a sigla df como abreviação de data frame.
Metapacote
✔ readr ✔ dplyr ✔ tidyr ✔ ggplot2
✔ forcats ✔ stringr ✔ tibble ✔ purrr ✔ lubridate
Além disso, o operador pipe %>%, introduzido na linguagem R pelo pacote magrittr, também estará disponível.
Descrição
O pacote gapminder contém uma df chamada gapminder.
A df gapminder fornece informações reais e detalhadas sobre indicadores socioeconômicos de vários países ao longo do tempo.
Este conjunto de dados é muito utilizado para ilustrar diversas operações de manipualação e análise de dados.
Para acessar os dados gapminder, basta instalar e carregar o pacote gapminder:
| Variável | Descrição |
|---|---|
country |
nome do país. |
continent |
continente ao qual o país pertence. |
year |
ano da observação. |
lifeExp |
expectativa de vida ao nascer, em anos. |
pop |
população total do país. |
gdpPercap |
PIB per capita, ajustado pelas diferenças de poder de compra |
Rows: 1,704
Columns: 6
$ country <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", …
$ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, …
$ year <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, …
$ lifeExp <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.8…
$ pop <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12…
$ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, …
[1] "country" "continent" "year" "lifeExp" "pop" "gdpPercap"
country continent year lifeExp
Afghanistan: 12 Africa :624 Min. :1952 Min. :23.60
Albania : 12 Americas:300 1st Qu.:1966 1st Qu.:48.20
Algeria : 12 Asia :396 Median :1980 Median :60.71
Angola : 12 Europe :360 Mean :1980 Mean :59.47
Argentina : 12 Oceania : 24 3rd Qu.:1993 3rd Qu.:70.85
Australia : 12 Max. :2007 Max. :82.60
(Other) :1632
pop gdpPercap
Min. :6.001e+04 Min. : 241.2
1st Qu.:2.794e+06 1st Qu.: 1202.1
Median :7.024e+06 Median : 3531.8
Mean :2.960e+07 Mean : 7215.3
3rd Qu.:1.959e+07 3rd Qu.: 9325.5
Max. :1.319e+09 Max. :113523.1
Operadores Pipe em R
O operador pipe %>% foi introduzido na linguagem R pelo pacote magrittr.
Após carregar o pacote tidyverse, o operador %>% estará disponível.
A partir da versão R 4.0.0, o operador pipe |> foi introduzido na linguagem base.
Vou utilizar o operador mais antigo %>%.
Atalho do teclado para inserir: Ctrl + Shift + M
Operadores Pipe em R
Em programação, um operador pipe é uma técnica para passar informações de um processo para outro.
Vamos programar a seguinte operação usando o operador pipe:
Comece com a data frame gapminder e passe esta df para a função select();
selecione as variáveis country e lifeExp;
organize a df por lifeExp em ordem decrescente.
# A tibble: 1,704 × 2
country lifeExp
<fct> <dbl>
1 Japan 82.6
2 Hong Kong, China 82.2
3 Japan 82
4 Iceland 81.8
5 Switzerland 81.7
6 Hong Kong, China 81.5
7 Australia 81.2
8 Spain 80.9
9 Sweden 80.9
10 Israel 80.7
# ℹ 1,694 more rows
# A tibble: 1,704 × 2
country lifeExp
<fct> <dbl>
1 Japan 82.6
2 Hong Kong, China 82.2
3 Japan 82
4 Iceland 81.8
5 Switzerland 81.7
6 Hong Kong, China 81.5
7 Australia 81.2
8 Spain 80.9
9 Sweden 80.9
10 Israel 80.7
# ℹ 1,694 more rows
Procedimentos Comuns em Análise de Dados
Muitas vezes, para fazer alguma operação, desejamos selecionar somente certas observações (linhas) ou variáveis (colunas) de uma df.
Além disso, muitas vezes precisamos agrupar os dados por uma determinada(s) variável(s).
E também desejamos calcular estatísticas descritivas para esses subconjuntos de dados.
O objetivo do pacote dplyr é facilitar estas operações.
dplyr é muito útil nestas etapas
Vantagens
O pacote dplyr fornece uma série de funções muito úteis para manipular data frames de uma maneira que:
Objetivos de Aprendizagem
| Função | Descrição |
|---|---|
select() |
para selecionar variáveis (colunas) |
filter() |
para selecionar linhas |
group_by() |
para que as operações sejam realizadas “por grupo” |
summarize() |
calcula estatísticas descritivas |
mutate() |
cria novas variáveis a partir das variáveis existentes |
arrange() |
ordena a df segundo uma variável |
%>%) para combiná-las.A função select() seleciona colunas (ou variáveis) de uma df.
Exemplo - Seleção por Inclusão
Se, por exemplo, quisernos utilizar apenas as variáveis: country e gdpPercap da df gapminder.
podemos usar a função select() da seguinte forma:
# A tibble: 1,704 × 2
country gdpPercap
<fct> <dbl>
1 Afghanistan 779.
2 Afghanistan 821.
3 Afghanistan 853.
4 Afghanistan 836.
5 Afghanistan 740.
6 Afghanistan 786.
7 Afghanistan 978.
8 Afghanistan 852.
9 Afghanistan 649.
10 Afghanistan 635.
# ℹ 1,694 more rows
Exemplo - Seleção por Exclusão
# A tibble: 1,704 × 4
country year lifeExp gdpPercap
<fct> <int> <dbl> <dbl>
1 Afghanistan 1952 28.8 779.
2 Afghanistan 1957 30.3 821.
3 Afghanistan 1962 32.0 853.
4 Afghanistan 1967 34.0 836.
5 Afghanistan 1972 36.1 740.
6 Afghanistan 1977 38.4 786.
7 Afghanistan 1982 39.9 978.
8 Afghanistan 1987 40.8 852.
9 Afghanistan 1992 41.7 649.
10 Afghanistan 1997 41.8 635.
# ℹ 1,694 more rows
Essa mensagem indica que há uma funçào interna de mesmo nome. Para resolver o conflito, devemos utilizar dplyr::filter()
Exemplo 1 - Uma condição
Considere que você precisa fazer a seguinte operação
Comece com a data frame gapminder e passe esta df para a função select();
selecione as variáveis country e lifeExp;
Mas você precisa da expectativa de vida somente para países do continente europeu.
Nesse caso você precisa filtrar as linhas correspondentes ao continente europeu.
# A tibble: 360 × 2
country lifeExp
<fct> <dbl>
1 Albania 55.2
2 Albania 59.3
3 Albania 64.8
4 Albania 66.2
5 Albania 67.7
6 Albania 68.9
7 Albania 70.4
8 Albania 72
9 Albania 71.6
10 Albania 73.0
# ℹ 350 more rows
Operadores Relacionais
a == b é um operador relacional que retorna TRUE se a é exatamente igual a b, e FALSE, caso contrário.
É importante conhecer os operadodes relacionais de qualquer linguagem:
| operador | significado |
|---|---|
| a < b | a é menor que b? |
| a <= b | a é menor ou igual b? |
| a > b | a é maior que b? |
| a >= b | a é maior ou igual a b? |
| a == b | a é exatamente igual a b? |
| a != b | a é diferente de b? |
Múltiplas Condições
# A tibble: 30 × 2
country lifeExp
<fct> <dbl>
1 Albania 76.4
2 Austria 79.8
3 Belgium 79.4
4 Bosnia and Herzegovina 74.9
5 Bulgaria 73.0
6 Croatia 75.7
7 Czech Republic 76.5
8 Denmark 78.3
9 Finland 79.3
10 France 80.7
# ℹ 20 more rows
Explicação do código
Novamente, primeiro passamos a df gapminder para a função filter().
Depois passamos a versão filtrada da df gapminder para a função select().
A ordem das operações é muito importante neste caso.
Se usássemos select() primeiro, a função filter() não seria capaz de encontrar a variável continent, já que a teríamos removido na etapa anterior.
Sempre use filter() em primeiro lugar.
Motivação
Deveríamos estar reduzindo a repetitividade propensa a erros do que pode ser feito com R base, mas até agora não fizemos isso.
Pois teríamos que repetir o código anterior para cada continente.
Em vez de filter(), que somente passará observações que atendam aos seus critérios (nesse caso: continente=="Europa),
Podemos usar group_by(), que essencialmente usará todos os critérios exclusivos que você poderia ter usado no filtro.
Motivação
Usando a função group_by(), dividimos a df original em várias partes,
Então podemos usar funções (por exemplo, mean() ou sd()) dentro de summarize(), para calculá-las em cada uma das partes:
Agrupando por uma Variável
# A tibble: 5 × 2
continent renda_percapita_media
<fct> <dbl>
1 Africa 2194.
2 Americas 7136.
3 Asia 7902.
4 Europe 14469.
5 Oceania 18622.
Agrupando por Diversas Variáveis
A função group_by() nos permite agrupar por várias variáveis.
Calcule a renda per capita média por continente e por ano.
# A tibble: 60 × 3
# Groups: continent [5]
continent year renda_percapita_media_ano
<fct> <int> <dbl>
1 Africa 1952 1253.
2 Africa 1957 1385.
3 Africa 1962 1598.
4 Africa 1967 2050.
5 Africa 1972 2340.
6 Africa 1977 2586.
7 Africa 1982 2482.
8 Africa 1987 2283.
9 Africa 1992 2282.
10 Africa 1997 2379.
# ℹ 50 more rows
Calculo de Diversas Estatísticas Descritivas
Isso já é bastante poderoso, mas fica ainda melhor!
Você não está limitado a calcular apenas uma estatística descritiva com summarize().
Calcule a renda per capita média e mediana do continente europeu para o ano de 2007.
# A tibble: 1 × 4
# Groups: continent [1]
continent year renda_percapita_media_ano renda_percapita_mediana_ano
<fct> <int> <dbl> <dbl>
1 Europe 2007 25054. 28054.
A função mutate() do pacote dplyr é usada para adicionar novas variáveis ou modificar variáveis existentes em uma df
Calcular o PIB Total
Podemos usar mutate() para calcular o Produto Interno Bruto (PIB) total de cada país a partir do PIB per capita (gdpPercap) e da população (pop).
Este exemplo cria uma nova coluna pib_total que é o resultado da multiplicação do PIB per capita pela população total do país naquele ano.
# A tibble: 1,704 × 7
country continent year lifeExp pop gdpPercap pib_total
<fct> <fct> <int> <dbl> <int> <dbl> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779. 6567086330.
2 Afghanistan Asia 1957 30.3 9240934 821. 7585448670.
3 Afghanistan Asia 1962 32.0 10267083 853. 8758855797.
4 Afghanistan Asia 1967 34.0 11537966 836. 9648014150.
5 Afghanistan Asia 1972 36.1 13079460 740. 9678553274.
6 Afghanistan Asia 1977 38.4 14880372 786. 11697659231.
7 Afghanistan Asia 1982 39.9 12881816 978. 12598563401.
8 Afghanistan Asia 1987 40.8 13867957 852. 11820990309.
9 Afghanistan Asia 1992 41.7 16317921 649. 10595901589.
10 Afghanistan Asia 1997 41.8 22227415 635. 14121995875.
# ℹ 1,694 more rows
Ordem Crescente
# A tibble: 25 × 2
country lifeExp
<fct> <dbl>
1 Haiti 60.9
2 Bolivia 65.6
3 Trinidad and Tobago 69.8
4 Honduras 70.2
5 Guatemala 70.3
6 Peru 71.4
7 Paraguay 71.8
8 El Salvador 71.9
9 Dominican Republic 72.2
10 Brazil 72.4
# ℹ 15 more rows
Ordem Decrescente
# A tibble: 25 × 2
country lifeExp
<fct> <dbl>
1 Canada 80.7
2 Costa Rica 78.8
3 Puerto Rico 78.7
4 Chile 78.6
5 Cuba 78.3
6 United States 78.2
7 Uruguay 76.4
8 Mexico 76.2
9 Panama 75.5
10 Argentina 75.3
# ℹ 15 more rows
Count = Contar
Uma operação muito comum em ciência de dados é contar o número de observações de uma variável ou grupo.
A função count() é uma forma rápida de contar o número de ocorrências de valores únicos em uma variável (coluna).
Passamos a ela o nome de uma ou mais colunas que contêm os grupos em que estamos interessados,
E podemos, opcionalmente, classificar os resultados em ordem decrescente usando o argumento sort=TRUE:
Descrição
# A tibble: 142 × 2
country n
<fct> <int>
1 Afghanistan 12
2 Albania 12
3 Algeria 12
4 Angola 12
5 Argentina 12
6 Australia 12
7 Austria 12
8 Bahrain 12
9 Bangladesh 12
10 Belgium 12
# ℹ 132 more rows
Descrição
# A tibble: 5 × 2
continent n
<fct> <int>
1 Africa 624
2 Americas 300
3 Asia 396
4 Europe 360
5 Oceania 24
Descrição
Quantos países foram registrados no conjunto de dados gapminder em cada ano?
# A tibble: 12 × 2
year n
<int> <int>
1 1952 142
2 1957 142
3 1962 142
4 1967 142
5 1972 142
6 1977 142
7 1982 142
8 1987 142
9 1992 142
10 1997 142
11 2002 142
12 2007 142
Descrição
# A tibble: 1 × 2
country n
<fct> <int>
1 Brazil 12